package com.lq.learningTest.AnnotationTest;

import java.util.List;

//有注解，就需要有注解对应的处理器这个为Singleton注解的解析器
public class SingletonHandler {

    public static void handler(List<String> classNames){
        for (String className : classNames) {
            Class<?> clazz = null;
            try {
                clazz = Class.forName(className);// 通过类名反射获取Class对象
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }


            // 检查该类是否使用了@Singleton注解：如果通过反射类能获得对应的注解，那就是使用了
            Singleton annotation = clazz.getAnnotation(Singleton.class);
            if(annotation != null){
                Object instance = null;
                try {
                    instance = clazz.newInstance();// 创建无参实例
                } catch (InstantiationException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                // 注册到IOC容器中
                ApplicationContext.addSingleton(clazz,instance);
            }
        }
    }
}
